Current data replication methods replicate data from a read-write primary data storage server to read-only secondary data storage servers. Data storage servers are referred to herein as simply servers. The primary server and the secondary servers can be located in different geographical regions. One of the characteristics of such a replication technique can include a slow write operation if a client computer (“client”) that is writing data to the primary server is located in a geographical region different from that of the primary server. Moreover, if the write operation is a synchronous write operation, the client can experience an additional delay, which is incurred in writing the data to the secondary servers. Typically, the client is unaware of why the write operations are slow, which can lead the clients to conclude that the application writing the data is faulty or slow. Increasing the number of secondary servers can increase data availability and/or reliability as a number of replicas of the data increases. However, increasing the number of servers can further increase the delay. Accordingly, the above data replication method is not scalable.
Some data replication methods, e.g., peer-to-peer file sharing networks, are scalable but the delay involved in replicating data to a particular destination can be significant. In a typical peer-to-peer file sharing network, a data file is made available to a client interested in downloading it through a number of nodes, e.g., a home computer, acting as a seed. The client can download it by connecting to the seeds and/or other peers. The peer-to-peer file sharing network typically implements a segmented file transfer protocol: the file being distributed is divided into segments. As each peer receives a new segment of the file it becomes a source (of that segment) for other peers, relieving the original seed from having to send that piece to every computer or user wishing a copy. In such file sharing systems, a segment may have to transit many nodes before the client can receive it. The number of nodes the segment has to be transit through before the client can receive it is not fixed and therefore, the time taken to receive the data segment can vary significantly, and cannot be guaranteed.